From b375e362233b818e46aecfda7b0dc38ddd233499 Mon Sep 17 00:00:00 2001 From: "kaf24@scramble.cl.cam.ac.uk" Date: Mon, 23 Feb 2004 15:16:56 +0000 Subject: [PATCH] bitkeeper revision 1.737.2.1 (403a19687Hq5Q8vjslGwmnEJKF9-Sg) hypervisor.h, time.c, hypervisor-if.h, kernel.c, entry.S: Sanitise hypercall numbering. Added a get-xen-version hypercall. --- extras/mini-os/h/hypervisor.h | 4 +- xen/arch/i386/entry.S | 13 +-- xen/common/kernel.c | 89 +++++++++++-------- xen/include/hypervisor-ifs/hypervisor-if.h | 25 +++--- .../arch/xeno/kernel/time.c | 2 +- .../include/asm-xeno/hypervisor.h | 15 +++- 6 files changed, 90 insertions(+), 58 deletions(-) diff --git a/extras/mini-os/h/hypervisor.h b/extras/mini-os/h/hypervisor.h index ad11c39a45..c0f9275945 100644 --- a/extras/mini-os/h/hypervisor.h +++ b/extras/mini-os/h/hypervisor.h @@ -176,12 +176,12 @@ static __inline__ int HYPERVISOR_stop(unsigned long srec) return ret; } -static __inline__ long HYPERVISOR_set_dom_timer(void *timer_arg) +static __inline__ long HYPERVISOR_set_timer_op(void *timer_arg) { int ret; __asm__ __volatile__ ( TRAP_INSTR - : "=a" (ret) : "0" (__HYPERVISOR_set_dom_timer), + : "=a" (ret) : "0" (__HYPERVISOR_set_timer_op), "b" (timer_arg) : "memory" ); return ret; diff --git a/xen/arch/i386/entry.S b/xen/arch/i386/entry.S index 4a135e5212..c1c57ac11d 100644 --- a/xen/arch/i386/entry.S +++ b/xen/arch/i386/entry.S @@ -704,28 +704,29 @@ nmi_io_err: .data ENTRY(hypervisor_call_table) - .long SYMBOL_NAME(do_set_trap_table) + .long SYMBOL_NAME(do_set_trap_table) /* 0 */ .long SYMBOL_NAME(do_mmu_update) .long SYMBOL_NAME(do_console_write) .long SYMBOL_NAME(do_set_gdt) .long SYMBOL_NAME(do_stack_switch) - .long SYMBOL_NAME(do_set_callbacks) + .long SYMBOL_NAME(do_set_callbacks) /* 5 */ .long SYMBOL_NAME(do_net_io_op) .long SYMBOL_NAME(do_fpu_taskswitch) .long SYMBOL_NAME(do_sched_op) - .long SYMBOL_NAME(do_set_timer_op) .long SYMBOL_NAME(do_dom0_op) - .long SYMBOL_NAME(do_network_op) + .long SYMBOL_NAME(do_network_op) /* 10 */ .long SYMBOL_NAME(do_block_io_op) .long SYMBOL_NAME(do_set_debugreg) .long SYMBOL_NAME(do_get_debugreg) .long SYMBOL_NAME(do_update_descriptor) - .long SYMBOL_NAME(do_set_fast_trap) + .long SYMBOL_NAME(do_set_fast_trap) /* 15 */ .long SYMBOL_NAME(do_dom_mem_op) .long SYMBOL_NAME(do_multicall) .long SYMBOL_NAME(do_kbd_op) .long SYMBOL_NAME(do_update_va_mapping) + .long SYMBOL_NAME(do_set_timer_op) /* 20 */ .long SYMBOL_NAME(do_event_channel_op) + .long SYMBOL_NAME(do_xen_version) .rept NR_syscalls-((.-hypervisor_call_table)/4) - .long SYMBOL_NAME(sys_ni_syscall) + .long SYMBOL_NAME(do_ni_syscall) .endr diff --git a/xen/common/kernel.c b/xen/common/kernel.c index 42d6b1f46f..b113f2c812 100644 --- a/xen/common/kernel.c +++ b/xen/common/kernel.c @@ -266,6 +266,10 @@ void cmain(unsigned long magic, multiboot_info_t *mbi) } +/********************************* + * Various console code follows... + */ + /* VGA text (mode 3) definitions. */ #define COLUMNS 80 #define LINES 25 @@ -458,41 +462,6 @@ void printf(const char *fmt, ...) } -void panic(const char *fmt, ...) -{ - va_list args; - char buf[128]; - unsigned long flags; - extern void machine_restart(char *); - - va_start(args, fmt); - (void)vsnprintf(buf, sizeof(buf), fmt, args); - va_end(args); - - /* Spit out multiline message in one go. */ - spin_lock_irqsave(&console_lock, flags); - __putstr("\n****************************************\n"); - __putstr(buf); - __putstr("Aieee! CPU"); - sprintf(buf, "%d", smp_processor_id()); - __putstr(buf); - __putstr(" is toast...\n"); - __putstr("****************************************\n\n"); - __putstr("Reboot in five seconds...\n"); - spin_unlock_irqrestore(&console_lock, flags); - - mdelay(5000); - machine_restart(0); -} - - -/* No-op syscall. */ -asmlinkage long sys_ni_syscall(void) -{ - return -ENOSYS; -} - - unsigned short compute_cksum(unsigned short *buf, int count) { unsigned long sum = 0; @@ -625,6 +594,38 @@ long do_console_write(char *str, unsigned int count) } +/********************************* + * Debugging/tracing/error-report. + */ + +void panic(const char *fmt, ...) +{ + va_list args; + char buf[128]; + unsigned long flags; + extern void machine_restart(char *); + + va_start(args, fmt); + (void)vsnprintf(buf, sizeof(buf), fmt, args); + va_end(args); + + /* Spit out multiline message in one go. */ + spin_lock_irqsave(&console_lock, flags); + __putstr("\n****************************************\n"); + __putstr(buf); + __putstr("Aieee! CPU"); + sprintf(buf, "%d", smp_processor_id()); + __putstr(buf); + __putstr(" is toast...\n"); + __putstr("****************************************\n\n"); + __putstr("Reboot in five seconds...\n"); + spin_unlock_irqrestore(&console_lock, flags); + + mdelay(5000); + machine_restart(0); +} + + void __out_of_line_bug(int line) { printk("kernel BUG in header file at line %d\n", line); @@ -633,6 +634,24 @@ void __out_of_line_bug(int line) } +/********************************* + * Simple syscalls. + */ + +long do_xen_version(int cmd) +{ + if ( cmd != 0 ) + return -ENOSYS; + return (XEN_VERSION<<16) | (XEN_SUBVERSION); +} + +long do_ni_syscall(void) +{ + /* No-op syscall. */ + return -ENOSYS; +} + + /* * GRAVEYARD */ diff --git a/xen/include/hypervisor-ifs/hypervisor-if.h b/xen/include/hypervisor-ifs/hypervisor-if.h index e9b9ce49ed..9ee56c04d0 100644 --- a/xen/include/hypervisor-ifs/hypervisor-if.h +++ b/xen/include/hypervisor-ifs/hypervisor-if.h @@ -49,19 +49,20 @@ #define __HYPERVISOR_net_io_op 6 #define __HYPERVISOR_fpu_taskswitch 7 #define __HYPERVISOR_sched_op 8 -#define __HYPERVISOR_set_dom_timer 9 -#define __HYPERVISOR_dom0_op 10 -#define __HYPERVISOR_network_op 11 -#define __HYPERVISOR_block_io_op 12 -#define __HYPERVISOR_set_debugreg 13 -#define __HYPERVISOR_get_debugreg 14 -#define __HYPERVISOR_update_descriptor 15 -#define __HYPERVISOR_set_fast_trap 16 -#define __HYPERVISOR_dom_mem_op 17 -#define __HYPERVISOR_multicall 18 -#define __HYPERVISOR_kbd_op 19 -#define __HYPERVISOR_update_va_mapping 20 +#define __HYPERVISOR_dom0_op 9 +#define __HYPERVISOR_network_op 10 +#define __HYPERVISOR_block_io_op 11 +#define __HYPERVISOR_set_debugreg 12 +#define __HYPERVISOR_get_debugreg 13 +#define __HYPERVISOR_update_descriptor 14 +#define __HYPERVISOR_set_fast_trap 15 +#define __HYPERVISOR_dom_mem_op 16 +#define __HYPERVISOR_multicall 17 +#define __HYPERVISOR_kbd_op 18 +#define __HYPERVISOR_update_va_mapping 19 +#define __HYPERVISOR_set_timer_op 20 #define __HYPERVISOR_event_channel_op 21 +#define __HYPERVISOR_xen_version 22 /* And the trap vector is... */ #define TRAP_INSTR "int $0x82" diff --git a/xenolinux-2.4.25-sparse/arch/xeno/kernel/time.c b/xenolinux-2.4.25-sparse/arch/xeno/kernel/time.c index 0e0542236a..cb64f1fdb4 100644 --- a/xenolinux-2.4.25-sparse/arch/xeno/kernel/time.c +++ b/xenolinux-2.4.25-sparse/arch/xeno/kernel/time.c @@ -532,7 +532,7 @@ int set_timeout_timer(void) alarm = __jiffies_to_st(timer->expires); /* Failure is pretty bad, but we'd best soldier on. */ - if ( HYPERVISOR_set_dom_timer(alarm) != 0 ) + if ( HYPERVISOR_set_timer_op(alarm) != 0 ) ret = -1; spin_unlock(&timerlist_lock); diff --git a/xenolinux-2.4.25-sparse/include/asm-xeno/hypervisor.h b/xenolinux-2.4.25-sparse/include/asm-xeno/hypervisor.h index 18dbe86ec1..e3cb2e0ac7 100644 --- a/xenolinux-2.4.25-sparse/include/asm-xeno/hypervisor.h +++ b/xenolinux-2.4.25-sparse/include/asm-xeno/hypervisor.h @@ -294,14 +294,14 @@ static inline int HYPERVISOR_stop(unsigned long srec) return ret; } -static inline long HYPERVISOR_set_dom_timer(u64 timeout) +static inline long HYPERVISOR_set_timer_op(u64 timeout) { int ret; unsigned long timeout_hi = (unsigned long)(timeout>>32); unsigned long timeout_lo = (unsigned long)timeout; __asm__ __volatile__ ( TRAP_INSTR - : "=a" (ret) : "0" (__HYPERVISOR_set_dom_timer), + : "=a" (ret) : "0" (__HYPERVISOR_set_timer_op), "b" (timeout_hi), "c" (timeout_lo) : "memory" ); return ret; @@ -435,4 +435,15 @@ static inline int HYPERVISOR_update_va_mapping( return ret; } +static inline int HYPERVISOR_xen_version(int cmd) +{ + int ret; + __asm__ __volatile__ ( + TRAP_INSTR + : "=a" (ret) : "0" (__HYPERVISOR_xen_version), + "b" (cmd) : "memory" ); + + return ret; +} + #endif /* __HYPERVISOR_H__ */ -- 2.30.2